#if !defined(ximera_physics_iworld_hpp)
#define ximera_physics_iworld_hpp

// -----------------------------------------------------------

#include <ximera/math/vector3.hpp>
#include <ximera/physics/ispace.hpp>

namespace ximera { namespace physics
{
    XIMERA_ENUM(StepType)
        Normal,
        Quick
    XIMERA_ENUM_END(StepType)

    class XIMERA_API IWorld
    {
    public:
		virtual ~IWorld();

        virtual math::Vector3 gravity() const = 0;
        virtual void gravity(math::Vector3 const& value) = 0;

        virtual ISpace* createSpace(SpaceType type = SpaceType::Simple) = 0;
        
        virtual ISpace* space() const = 0;
        virtual ISpace* space(UInt32 index) const = 0;
        virtual UInt32 spaceCount() const = 0;

        virtual StepType stepType() const = 0;
        virtual void stepType(StepType value) = 0;

        virtual void step(Real secs) = 0;
    };
}}

// -----------------------------------------------------------

#endif
